/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Modelo.ENT_Kardex;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Isaac Paliza <anndysaac@hotmail.com>
 */
public class CTRL_Kardex {

    private static final ConnectionJDBC connectionJDBC = new ConnectionJDBC();
    private static final Statement statement = connectionJDBC.createStatement();
    public static String Mensaje;

    public static List CargarLibro(String idFeria, String fechaActual) throws SQLException {
        ArrayList<ENT_Kardex> DatoKardex = new ArrayList();
        String sql = "SELECT DISTINCT L.idLibro, L.nombre "
                + "FROM (t_tablamov AS M "
                + "INNER JOIN t_kardex AS K "
                + "ON M.idKardex = K.idKardex) "
                + "INNER JOIN t_libro AS L  "
                + "ON M.idLibro = L.idLibro "
                + "WHERE (K.idFeria =" + idFeria + " AND K.fecha='" + fechaActual + "' AND M.idTipoMov=1)";

        ResultSet recordingResults2
                = ConnectionJDBC.executeQuery(statement, sql);
        while (recordingResults2.next()) {
            String idLibroAux = recordingResults2.getString(1);
            if (recordingResults2.wasNull()) {
                idLibroAux = "";
            }
            String nombreAux = recordingResults2.getString(2);
            if (recordingResults2.wasNull()) {
                nombreAux = "";
            }
            DatoKardex.add(new ENT_Kardex(idLibroAux, nombreAux));
        }
        return DatoKardex;
    }
    public static List CargarKardex(String idFeria, String fechaActual) throws SQLException {
        ArrayList<ENT_Kardex> ListaLibros = (ArrayList<ENT_Kardex>) CargarLibro(idFeria, fechaActual);
        ArrayList<ENT_Kardex> DatoKardex = new ArrayList();
        for (int i = 0; i < ListaLibros.size(); i++) {
            String sql2 = "SELECT M.idTablaMov, L.idLibro, L.codigoArt, L.nombre, SUM(M.cantidad), M.precioT "
                    + "FROM (t_tablamov AS M "
                    + "INNER JOIN t_kardex AS K "
                    + "ON M.idKardex = K.idKardex) "
                    + "INNER JOIN t_libro AS L  "
                    + "ON M.idLibro = L.idLibro "
                    + "WHERE (K.idFeria =" + idFeria + " "
                    + "AND L.idLibro= " + ListaLibros.get(i).getIdLibro() + " "
                    + "AND K.fecha='" + fechaActual + "' "
                    + "AND M.idTipoMov=1)";

            ResultSet recordingResults
                    = ConnectionJDBC.executeQuery(statement, sql2);
            while (recordingResults.next()) {
                String idTablaMov = recordingResults.getString(1);
                if (recordingResults.wasNull()) {
                    idTablaMov = "";
                }

                String idLibroAux = recordingResults.getString(2);
                if (recordingResults.wasNull()) {
                    idLibroAux = "";
                }
                String codigoArtAux = recordingResults.getString(3);
                if (recordingResults.wasNull()) {
                    codigoArtAux = "";
                }
                String nombreAux = recordingResults.getString(4);
                if (recordingResults.wasNull()) {
                    nombreAux = "";
                }
                String cantidadAux = recordingResults.getString(5);
                if (recordingResults.wasNull()) {
                    cantidadAux = "";
                }
                String precioTAux = recordingResults.getString(6);
                if (recordingResults.wasNull()) {
                    precioTAux = "";
                }
                DatoKardex.add(new ENT_Kardex(idTablaMov, idLibroAux, codigoArtAux,
                        nombreAux, cantidadAux, precioTAux, "", ""));
                //---------
            }
        }
        return DatoKardex;
    }

    public static List CargarReposiciones(String idFeria, String fechaActual) throws SQLException {
        ArrayList<ENT_Kardex> ListaLibros = (ArrayList<ENT_Kardex>) CargarKardex(idFeria, fechaActual);
        ArrayList<ENT_Kardex> ListaReposiciones = new ArrayList();
        for (int i = 0; i < ListaLibros.size(); i++) {
            String sql2 = "SELECT SUM(M.cantidad) "
                    + "FROM (t_tablamov AS M "
                    + "INNER JOIN t_kardex AS K "
                    + "ON M.idKardex = K.idKardex) "
                    + "INNER JOIN t_libro AS L  "
                    + "ON M.idLibro = L.idLibro "
                    + "WHERE (K.idFeria =" + idFeria + " "
                    + "AND L.idLibro= " + ListaLibros.get(i).getIdLibro() + " "
                    + "AND K.fecha='" + fechaActual + "' "
                    + "AND M.idTipoMov = 3)";

            ResultSet recordingResults
                    = ConnectionJDBC.executeQuery(statement, sql2);
            while (recordingResults.next()) {
                String cantidadAux = recordingResults.getString(1);
                if (recordingResults.wasNull()) {
                    cantidadAux = "0";
                }
                ListaReposiciones.add(new ENT_Kardex(cantidadAux));
            }
        }
        return ListaReposiciones;
    }

//    public static List CargarVentas(String idFeria, String fechaActual) throws SQLException {
//        ArrayList<ENT_Kardex> ListaLibros = (ArrayList<ENT_Kardex>) CargarKardex(idFeria, fechaActual);
//        ArrayList<ENT_Kardex> ListaVentas = new ArrayList();
//        for (int i = 0; i < ListaLibros.size(); i++) {
//            String sql2 = "SELECT SUM(M.cantidad) "
//                    + "FROM (t_tablamov AS M "
//                    + "INNER JOIN t_kardex AS K "
//                    + "ON M.idKardex = K.idKardex) "
//                    + "INNER JOIN t_libro AS L  "
//                    + "ON M.idLibro = L.idLibro "
//                    + "WHERE (K.idFeria =" + idFeria + " "
//                    + "AND L.idLibro= " + ListaLibros.get(i).getIdLibro() + " "
//                    + "AND K.fecha='" + fechaActual + "' "
//                    + "AND M.idTipoMov=2)";
//
//            ResultSet recordingResults
//                    = ConnectionJDBC.executeQuery(statement, sql2);
//            while (recordingResults.next()) {
//                String cantidadAux = recordingResults.getString(1);
//                if (recordingResults.wasNull()) {
//                    cantidadAux = "0";
//                }
//                ListaVentas.add(new ENT_Kardex(cantidadAux));
//            }
//        }
//        return ListaVentas;
//    }

    public static List CargarKardex2(String idFeria, String fechaActual) throws SQLException {
        ArrayList<ENT_Kardex> ListaLibros = (ArrayList<ENT_Kardex>) CargarKardex(idFeria, fechaActual);
        ArrayList<ENT_Kardex> ListaReposiciones = (ArrayList<ENT_Kardex>) CargarReposiciones(idFeria, fechaActual);
        for (int i = 0; i < ListaLibros.size(); i++) {
            String sql2 = "SELECT SUM(M.cantidad) "
                    + "FROM (t_tablamov AS M "
                    + "INNER JOIN t_kardex AS K "
                    + "ON M.idKardex = K.idKardex) "
                    + "INNER JOIN t_libro AS L  "
                    + "ON M.idLibro = L.idLibro "
                    + "WHERE (K.idFeria =" + idFeria + " AND L.idLibro= " + ListaLibros.get(i).getIdLibro() + " AND K.fecha='" + fechaActual + "' AND M.idTipoMov=2)";

            ResultSet recordingResults
                    = ConnectionJDBC.executeQuery(statement, sql2);
            while (recordingResults.next()) {
                String cantidad = recordingResults.getString(1);
                if (recordingResults.wasNull()) {
                    cantidad = "0";
                }
                int C = Integer.parseInt(ListaLibros.get(i).getCantidad()) - Integer.parseInt(cantidad);
                if (Integer.parseInt(cantidad) == 0) {
                    cantidad = "";
                }
                ListaLibros.get(i).setCantidad(C + "");
                ListaLibros.get(i).setCantidadVenta(cantidad);
//                ListaLibros.get(i).setReposicion(ListaReposiciones.get(i).getReposicion());
                ListaLibros.get(i).setReposicion("0");
                //---------
            }
        }
        return ListaLibros;
    }

    public static String idKardex(String idFeria, String fechaActual) throws SQLException {
        String sql = "SELECT K.idKardex "
                + "FROM (t_tablamov AS M "
                + "INNER JOIN t_kardex AS K "
                + "ON M.idKardex = K.idKardex) "
                + "INNER JOIN t_libro AS L  "
                + "ON M.idLibro = L.idLibro "
                + "WHERE (K.idFeria =" + idFeria + " AND K.fecha='" + fechaActual + "' AND M.idTipoMov=1)";

        ResultSet resultSet = ConnectionJDBC.executeQuery(statement, sql);
        resultSet.next();
        return resultSet.getString(1);
    }

    public static String getFechaBD(String idFeria) throws SQLException {
        String sql = "SELECT Max(fecha) "
                + "FROM t_kardex "
                + "WHERE idFeria=" + idFeria;

        ResultSet resultSet = ConnectionJDBC.executeQuery(statement, sql);
        resultSet.next();
        return resultSet.getString(1);
    }

    public static String AgregarMovimientoEntrada(String idKardex, String idLibro, String cantidad) throws SQLException {
        String sql3 = "SELECT cantidad "
                + "FROM t_tablamov "
                + "WHERE idKardex =" + idKardex + " AND idLibro=" + idLibro + " AND idTipoMov=1";
        ResultSet resultSet1 = ConnectionJDBC.executeQuery(statement, sql3);
        resultSet1.next();
        String sql = "UPDATE t_tablamov "
                + "SET cantidad=" + (Integer.parseInt(resultSet1.getString(1)) + Integer.parseInt(cantidad)) + " "
                + "WHERE idKardex =" + idKardex + " AND idLibro=" + idLibro + " AND idTipoMov=1";
        try {
            statement.execute(sql);
            return "Se agrego el " + cantidad + " libros";
        } catch (SQLException e) {
            return "error";
        }
    }
//           String idKardex, String idLibro, String cantidad, String precioT

    public static String AgregarMovimientoSalida(
            int idTablaMov, 
            int idDocumento,
            String idTipoMov, 
            String idKardex, 
            String idLibro, 
            String cantidad, 
            int precioT)
            throws SQLException {
//        String sqlMEntrada = "SELECT SUM(cantidad) "
//                + "FROM t_tablamov "
//                + "WHERE idKardex =" + idKardex + " AND idLibro=" + idLibro + " AND idTipoMov=1";
//        ResultSet resultSetME
//                = ConnectionJDBC.executeQuery(statement, sqlMEntrada);
//        String cantidadMEntradaAux = "";
//        while (resultSetME.next()) {
//            cantidadMEntradaAux = resultSetME.getString(1);
//            if (resultSetME.wasNull()) {
//                cantidadMEntradaAux = "0";
//            }
//        }
//        String sqlMSalida = "SELECT SUM(cantidad) "
//                + "FROM t_tablamov "
//                + "WHERE idKardex ="+idKardex+" AND idLibro=" + idLibro + " AND idTipoMov=2";
//        ResultSet resultSetMS
//                = ConnectionJDBC.executeQuery(statement, sqlMSalida);
//        String cantidadMSalida = "";
//        while (resultSetMS.next()) {
//            cantidadMSalida = resultSetMS.getString(1);
//            if (resultSetMS.wasNull()) {
//                cantidadMSalida = "0";
//            }
//        }

//        if (Integer.parseInt(cantidadMEntradaAux) < Integer.parseInt(cantidad)) {
//            return "Cantida disponible " + cantidadMEntradaAux;
//        }
        String sql = "INSERT INTO t_tablamov "
                + "VALUES (" + idTablaMov + ", " + idKardex + ", " + idTipoMov + ", " + idLibro + ", " + idDocumento + ", " + cantidad + ", " + precioT + ", " + "' '" + ")";
        try {
            statement.execute(sql);
            return "bien";
        } catch (SQLException e) {
            return "error";
        }

//        String sql7 = "UPDATE t_tablamov "
//                + "SET cantidad=" + (Integer.parseInt(cantidadAux) - Integer.parseInt(cantidad)) + ", "
//                + "precioT = "+ precioT+ " "
//                + "WHERE idKardex ="+idKardex+" AND idLibro=" + idLibro+" AND idTipoMov=1";
// 
//        String sql3 = "SELECT cantidad "
//                + "FROM t_tablamov "
//                + "WHERE idKardex ="+idKardex+" AND idLibro=" + idLibro + " AND idTipoMov=2";
//        ResultSet resultSet1 = ConnectionJDBC.executeQuery(statement, sql3);
//        resultSet1.next();
//        String sql = "UPDATE t_tablamov "
//                + "SET cantidad=" + (Integer.parseInt(resultSet1.getString(1)) + Integer.parseInt(cantidad)) + " "
//                + "WHERE idKardex ="+idKardex+" AND idLibro=" + idLibro+" AND idTipoMov=2";
//        try {
//            statement.execute(sql7);
//            statement.execute(sql);
//            return "Se vendio "+cantidad+" libros";
//        } catch (SQLException e) {
//            return "error";
//        }
    }

    public static int buscarIndex(List datosKardex, String idLibro) {
        ArrayList<ENT_Kardex> DatoKardex = (ArrayList<ENT_Kardex>) datosKardex;
        for(int i =0; i<DatoKardex.size(); i++){
            if(DatoKardex.get(i).getIdLibro().equals(idLibro)){
                 return i;
            }
        }
        return -1;
    }
}
